iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1

前言

各位還記得之前在 Day04 有講過 Standard IO 的 Redirect 嗎,接下來兩天我們要開始實作 Redirect Stdin,至於 Stdout 跟 Stderr 因為做法差不多,時間不多的情況下就留給大家自己想想怎麼做了

Redirect Operator <

怕大家已經忘記怎麼 Redirect Stdin,這邊舉個簡單的例子:

譬如說我可以先準備好一個 data 檔案並寫入以下內容

# data
print(1 + 1)
print("Hello" + "World")

接著執行 python < data,意思是把 data 的內容餵進去 python 的 Stdin,那 python 讀取到這些內容之後就會輸出對應的結果

從 Shell 的角度看 Redirect

上面的例子是從 user 的角度看如何使用 Redirect Operator,那對 Shell 來說要怎麼做到 Redirect 呢?

首先 Shell 會先看到最後面的 < data這個 < data 並不是 python 的參數 ,而是用來告訴 Shell 說要把 Stdin 的資料來源重新導向到 data

python < data

所以 Shell 看到 ... < data 就會知道「哦~原來你的程式想要 data 檔案當成 Stdin 啊」,於是 Shell 就會幫你

  1. 開啟 data 檔案
  2. python 指令的 Stdin 設為 data 檔案
  3. 執行 python 指令

這樣跑起來的 python Process 要從 Stdin 讀取資料時就會讀到 data 的內容

錯誤處理

那這個過程中有沒有可能出錯呢?也許 data 檔案其實不存在,就像昨天要讀取 ~/.goshrc 一樣

在 zsh 裡面如果把 不存在的檔案名稱 當成資料餵進去,那在第一步「開啟 data 檔案」時就會出錯

zsh 會很明白的告訴你說沒有這個檔案,因為第一步就錯了所以也不會再執行下去

小結

今天對於在 Shell 中 Redirect Stdin 的流程就介紹到這邊,其實這個流程我也是猜的XD,也許 zsh 不是這樣做

但無論如何,我們明天就會根據這個流程來實作~


上一篇
Day20-.goshrc 設定檔(二)
下一篇
Day22-Redirect Stdin(二)
系列文
Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言